#ifndef _SE_SCENEHIERARCHYPANEL_
#define _SE_SCENEHIERARCHYPANEL_

#include "Core/Layer.h"

#include "Scene/Entity.hpp"

namespace SE
{
	class SceneHierarchyPanel final : public Layer
	{
	private:
		Weak<Scene> mCurrentScene;
		Entity mSelectedEntity;

	public:
		SceneHierarchyPanel() = default;
		~SceneHierarchyPanel() = default;

		void setCurrentScene(const Ref<Scene>& scene);

		virtual void onRender(const Double deltaMilliseconds) override;
		virtual String getName() const override;
	private:
		void drawEntityNode(Entity entity);
		void drawComponents(Entity entity);

		template<typename _Ty>
		void displayAddComponentEntry(const String& entryName);
	};
} // !namespace SE

#endif // !_SE_SCENEHIERARCHYPANEL_